package SoftwarePrinciple.CompositeReusePrinciple;

/**
 * @author: Themberfue
 * @date: 2025/8/8 11:16
 * @description:
 */
// 文本格式化功能 - 可复用组件
class TextFormatter {
    // 格式化文本为粗体
    public String formatBold(String text) {
        return "**" + text + "**";
    }

    // 格式化文本为斜体
    public String formatItalic(String text) {
        return "*" + text + "*";
    }
}

// 拼写检查功能 - 可复用组件
class SpellChecker {
    // 检查拼写并返回修正结果
    public String checkSpelling(String text) {
        // 简单模拟拼写检查：将常见错误"teh"修正为"the"
        return text.replaceAll("teh", "the");
    }
}

// 文档类 - 通过组合复用功能，而非继承
class Document {
    // 组合复用两个功能组件
    private TextFormatter formatter;
    private SpellChecker spellChecker;
    private String content;

    // 构造函数注入依赖
    public Document(TextFormatter formatter, SpellChecker spellChecker) {
        this.formatter = formatter;
        this.spellChecker = spellChecker;
        this.content = "";
    }

    // 文档功能：添加文本（自动检查拼写）
    public void addText(String text) {
        String checkedText = spellChecker.checkSpelling(text);
        this.content += checkedText;
    }

    // 文档功能：格式化文本
    public String formatDocument(boolean bold, boolean italic) {
        String formatted = content;
        if (bold) {
            formatted = formatter.formatBold(formatted);
        }
        if (italic) {
            formatted = formatter.formatItalic(formatted);
        }
        return formatted;
    }

    // 获取文档内容
    public String getContent() {
        return content;
    }
}

// 高级文档类 - 扩展功能，依然使用组合
class AdvancedDocument extends Document {
    // 新增图片处理功能（组合新组件）
    private ImageProcessor imageProcessor;

    public AdvancedDocument(TextFormatter formatter, SpellChecker checker, ImageProcessor processor) {
        super(formatter, checker);
        this.imageProcessor = processor;
    }

    // 新增插入图片功能
    public void insertImage(String imagePath) {
        String processedImage = imageProcessor.processImage(imagePath);
        addText("\n" + processedImage + "\n");
    }
}

// 图片处理功能 - 新增的可复用组件
class ImageProcessor {
    public String processImage(String imagePath) {
        // 模拟图片处理：生成图片标记
        return "[Image: " + imagePath + "]";
    }
}

// 主程序
public class DocumentEditor {
    public static void main(String[] args) {
        // 创建可复用的功能组件
        TextFormatter formatter = new TextFormatter();
        SpellChecker checker = new SpellChecker();
        ImageProcessor processor = new ImageProcessor();

        // 创建普通文档并使用
        Document simpleDoc = new Document(formatter, checker);
        simpleDoc.addText("This is teh first document."); // 包含拼写错误"teh"
        System.out.println("普通文档内容: " + simpleDoc.getContent());
        System.out.println("格式化后: " + simpleDoc.formatDocument(true, false) + "\n");

        // 创建高级文档并使用
        AdvancedDocument advancedDoc = new AdvancedDocument(formatter, checker, processor);
        advancedDoc.addText("This is an advanced document with images.");
        advancedDoc.insertImage("diagram.png");
        System.out.println("高级文档内容: " + advancedDoc.getContent());
        System.out.println("格式化后: " + advancedDoc.formatDocument(false, true));
    }
}

